﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;

namespace Data.Attributes
{
    [AttributeUsage(AttributeTargets.Property)]
    public class FieldsAttribute : Attribute
    {
        #region Fields
        private String _fields_name;
        private Boolean _inSelect;
        private Boolean _inUpdate;
        private Boolean _inInsert;
        private Boolean _PrimaryKey;
        private Boolean _Indexed;
        private Boolean _isNullable;
        private Boolean _isWildcard;
        private Int32 _Size;
        private SqlDbType _DbType;
        private Boolean _Identity;
        private Int16 _indexGroup1;
        private Int16 _indexGroup2;
        private Int16 _indexGroup3;
        private Int16 _indexGroup4;
        private Int16 _indexGroup5;
        private Boolean _uniqueIndex;
        #endregion

        #region Properties
        /// <summary>
        /// Database deki Karşılığı
        /// </summary>
        public String Fields_Name
        {
            get
            {
                return _fields_name;
            }
            set
            {
                _fields_name = value;
            }
        }

        /// <summary>
        /// Select Cümlesine Dahil mi ?
        /// </summary>
        public Boolean InSelect
        {
            get
            {
                return _inSelect;
            }
            set
            {
                _inSelect = value;
            }
        }

        /// <summary>
        /// Update Cümlesine Dahil mi ?
        /// </summary>
        public Boolean InUpdate
        {
            get
            {
                return _inUpdate;
            }
            set
            {
                _inUpdate = value;
            }
        }

        /// <summary>
        /// İnsert Cümlesine Dahil mi ?
        /// </summary>
        public Boolean InInsert
        {
            get
            {
                return _inInsert;
            }
            set
            {
                _inInsert = value;
            }
        }

        /// <summary>
        /// PrimaryKey mi?
        /// </summary>
        public Boolean PrimaryKey
        {
            get
            {
                return _PrimaryKey;
            }
            set
            {
                _PrimaryKey = value;
            }
        }

        /// <summary>
        /// Sütun Identity mi ?
        /// </summary>
        public Boolean Identity
        {
            get
            {
                return _Identity;
            }
            set
            {
                _Identity = value;
            }
        }

        /// <summary>
        /// İndex Varmı ?
        /// </summary>
        public Boolean Indexed
        {
            get
            {
                return _Indexed;
            }
            set
            {
                _Indexed = value;
            }
        }

        /// <summary>
        /// Null değer alabilir mi ?
        /// </summary>
        public Boolean IsNullable
        {
            get
            {
                return _isNullable;
            }
            set
            {
                _isNullable = value;
            }
        }

        /// <summary>
        /// * karakteri ile aramaya müsait mi
        /// </summary>
        public Boolean IsWildcard
        {
            get
            {
                return _isWildcard;
            }
            set
            {
                _isWildcard = value;
            }
        }

        /// <summary>
        /// Database deki alan büyüklüğü
        /// </summary>
        public Int32 Size
        {
            get
            {
                return _Size;
            }
            set
            {
                _Size = value;
            }
        }

        /// <summary>
        /// beraber indexlenecekleri aynı gruba dahil edilir eğer indexli değilse -1 yazılır
        /// </summary>
        public Int16 IndexGroup1
        {
            get
            {
                return _indexGroup1;
            }
            set
            {
                _indexGroup1 = value;
            }
        }

        /// <summary>
        /// beraber indexlenecekleri aynı gruba dahil edilir eğer indexli değilse -1 yazılır
        /// </summary>
        public Int16 IndexGroup2
        {
            get
            {
                return _indexGroup2;
            }
            set
            {
                _indexGroup2 = value;
            }
        }

        /// <summary>
        /// beraber indexlenecekleri aynı gruba dahil edilir eğer indexli değilse -1 yazılır
        /// </summary>
        public Int16 IndexGroup3
        {
            get
            {
                return _indexGroup3;
            }
            set
            {
                _indexGroup3 = value;
            }
        }

        /// <summary>
        /// beraber indexlenecekleri aynı gruba dahil edilir eğer indexli değilse -1 yazılır
        /// </summary>
        public Int16 IndexGroup4
        {
            get
            {
                return _indexGroup4;
            }
            set
            {
                _indexGroup4 = value;
            }
        }

        /// <summary>
        /// beraber indexlenecekleri aynı gruba dahil edilir eğer indexli değilse -1 yazılır
        /// </summary>
        public Int16 IndexGroup5
        {
            get
            {
                return _indexGroup5;
            }
            set
            {
                _indexGroup5 = value;
            }
        }

        /// <summary>
        /// Database deki veri tipi
        /// </summary>
        public SqlDbType DbType
        {
            get
            {
                return _DbType;
            }
            set
            {
                _DbType = value;
            }
        }

        public Boolean UniqueIndex
        {
            get { return _uniqueIndex; }
            set { _uniqueIndex = value; }
        }

        #endregion

        #region Constructor Methods
        /// <summary>
        /// Alan Belirleme işlemi
        /// </summary>
        /// <param name="fieldname">Database deki Adı</param>
        /// <param name="isselect">Select e Dahil mi ?</param>
        /// <param name="isupdate">Update e Dahil mi ?</param>
        /// <param name="isinsert">Insert e Dahil mi ?</param>
        /// <param name="isprimarykey">Primary Key mi ?</param>
        /// <param name="isindex">Index li mi ?</param>
        /// <param name="isnull">Null olabilir mi ?</param>
        /// <param name="iswild">* la aranabilir mi ?</param>
        /// <param name="fieldsize">Databasedeki Boyutu</param>
        /// <param name="fieldtype">Databasedeki Tipi</param>
        public FieldsAttribute(string fieldname, bool isselect, bool isupdate, bool isinsert, bool isprimarykey, bool isindex, bool isnull, bool iswild, Int32 fieldsize, SqlDbType fieldtype, Boolean identity, Boolean uniqIndex, Int16 indexgrup1, Int16 indexgrup2, Int16 indexgrup3, Int16 indexgrup4, Int16 indexgrup5)
        {
            _fields_name = fieldname;
            _inSelect = isselect;
            _inUpdate = isupdate;
            _inInsert = isinsert;
            _PrimaryKey = isprimarykey;
            _Indexed = isindex;
            _isNullable = isnull;
            _isWildcard = iswild;
            _Size = fieldsize;
            _DbType = fieldtype;
            _Identity = identity;
            _indexGroup1 = indexgrup1;
            _indexGroup2 = indexgrup2;
            _indexGroup3 = indexgrup3;
            _indexGroup4 = indexgrup4;
            _indexGroup5 = indexgrup5;
            _uniqueIndex = uniqIndex;
        }

        public FieldsAttribute()
        {

        }

        #endregion
    }
}
